骨骼动画详解-Spine
骨骼动画编辑器——Spine
收费的
#Spine动画的使用
Cocos2d-x程序中,使用Spine动画首先需要包含spine的相关头文件。1
2
3#include <spine/spine-cocos2dx.h>
#include "spine/spine.h"
using namespace spine;
创建一个Spine动画对象,将动画文件和资源文件导入。1
SkeletonAnimation *skeletonNode = SkeletonAnimation::createWithFile("spineboy.json", "spineboy.atlas");
骨骼动画往往是不止一个动画的,例如:当人物需要行走时,就设置播放动画为行走;当要发动攻击时,就设置播放动画为攻击。下面方法可以设置当前播放动画,其中参数false表示不循环播放,true表示循环播放。1
skeletonNode->setAnimation(0, "walk", true);
setAnimation方法只能播放一种动画,所以当要连续播放不同的动画时,需要使用addAnimation方法来实现,它可以一条一条的播放不同的动画。1
2skeletonNode->addAnimation(0, "walk", true);
skeletonNode->addAnimation(0, "attack", false);
对于一般情况下,动画的切换要求两个动画完全能衔接上,不然会出现跳跃感,这个对于美术来说要求很高,而Spine加了个动画混合的功能来解决这个问题。使得不要求两个动画能完全的衔接上,比如上面的walk和attack动画, 就是衔接不上的,直接按上面的办法播放,会出现跳跃,但是加了混合后,看起来就很自然了。哪怕放慢10倍速度观察,也完美无缺。这个功能在序列帧动画时是无法实现的,也是最体现Spine价值的一个功能。1
2skeletonNode->setMix("walk", "attack", 0.2f);
skeletonNode->setMix("attack", "walk", 0.4f);
设置动画的播放快慢可通过设置它的timeScale值来实现。1
skeletonNode->timeScale = 0.6f;
设置是否显示骨骼通过设置debugBones,true表示显示,false表示隐藏。1
skeletonNode->setDebugBonesEnabled(true);
例子:创建一个player行走和攻击的动画, 并且循环播放。1
2
3
4
5
6
7SkeletonAnimation *skeletonNode = SkeletonAnimation::createWithFile("spineboy.json", "spineboy.atlas");
skeletonNode->setTag(12345);
skeletonNode->setScale(0.3);
// skeletonNode->setDebugBonesEnabled(true);
skeletonNode->setPosition(Point(100 , 0));
layerHello->addChild(skeletonNode);
skeletonNode->addAnimation(0, "idle", true);
`